﻿// CollStarts.cpp : 实现文件
//

#include "stdafx.h"
#include "GHCY.h"
#include "Ground.h"
#include "../Hui/Hui.h"
#include "Car.h"
#include "GException.h"
#include "LogList.h"
#include "CollStarts.h"

// CollStarts

#ifdef _DEBUG
	#define new DEBUG_NEW
#endif

/// <作者>Mr. Hu</作者>
/// <日期>202001009</日期>
/// <功能>同类端点集合类</功能>
/// <参数 name = ""></参数>
/// <返回></返回>
/// <说明>同类端点集合，用于神经网络计算</说明>
CollStarts::CollStarts()
	: Collection()	// 成员修改后还要改operator =
{
}

//CollStarts::~CollStarts()
//{
//}

/// <类型>Fanction</类型>
/// <作者>Mr. Hu</作者>
/// <日期>20190901</日期>
/// <功能>能否到达指定的点</功能>
/// <参数 name = "nSerial">发车点号</参数>
/// <参数 name = "nPoint">端点号，id-1</参数>
/// <参数 name = "bFirst">指定终眯集合</参数>
/// <异常 name = "GException">没有找到发车点<异常>
/// <返回>能到TRUE，不能到FALSE</返回>
/// <说明>指定的发车点能否到达指定的端点，如果bFirst==TRUE并且私有终点表有值，用私有终点表判断，否则用公用终点表</说明>
BOOL CollStarts::isFriend(int nSerial, int /*nPoint*/, BOOL /*bFirst*/)
{
	// 发车点号
	size_t i = 0, length = m_arrPoint.GetCount();
	for (; i < length; i++)
	{
		if (m_arrPoint[i]->m_nSerial == nSerial)
			return TRUE;
	}

	return FALSE;

	// 先不考虑私有点和公有点
	// 发车点号，如果bFirst==TRUE并且私有终点表有值，用私有终点表判断，否则用公用终点表
	//CArray<int>& arrPoints = bFirst && m_arrStartPoints[i]->m_arrPoints1.GetCount()
	//	? m_arrStartPoints[i]->m_arrPoints1 : m_arrStartPoints[i]->m_arrPoints2;
	//length = arrPoints.GetCount();
	//i = 0;
	//for (; i < length && arrPoints[i] != nPoint; i++);

	//return i < length;
}

/// <类型>Fanction</类型>
/// <作者>Mr. Hu</作者>
/// <日期>20190901</日期>
/// <功能>取发车点对应的节点</功能>
/// <参数 name = "nSerial">发车点号</参数>
/// <异常 name = "GException">没有找到发车点<异常>
/// <返回>对应的道路节点，id</返回>
/// <说明>根据发车点号查找对应的道路节点(id-1)，如果没有发车点抛出异常</说明>
int CollStarts::getNode2(int nSerial)
{
	// 发车点号
	size_t i = 0, length = m_arrPoint.GetCount();
	for (; i < length; i++)
	{
		if (m_arrPoint[i]->m_nSerial == nSerial)
			return m_arrPoint[i]->m_pRoadNode->m_nID;
	}

	return  0;
}

/// <类型>Fanction</类型>
/// <作者>Mr. Hu</作者>
/// <日期>20190902</日期>
/// <功能>是不是发车点</功能>
/// <参数 name = "nNode">道路节点号id-1</参数>
/// <返回>对应的发车点号，-1没有</返回>
/// <异常 name = ""><异常>
/// <说明>判断给定的道路节点是不是发车点</说明>
int CollStarts::isStartNode(int nNode)
{
	// 发车点号
	size_t i = 0, length = m_arrPoint.GetCount();
	for (; i < length; i++)
	{
		if (m_arrPoint[i]->m_pRoadNode->m_nID - 1 == nNode)
			return m_arrPoint[i]->m_nSerial;
	}

	return  -1;
}